package com.chen.base.module.mybatis.scope;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 扩展通用 Mapper，支持数据权限 和批量插入
 *
 * @author ChenJinLong
 * @date 2023-06-21
 */
public interface ProBaseMapper<T> extends BaseMapper<T> {

	/**
	 * 批量插入 仅适用于 mysql
	 *
	 * @param entityList 实体列表
	 * @return 影响行数
	 */
	Integer insertBatchSomeColumn(List<T> entityList);

	/**
	 * 查询单列结果集
	 * todo 注意：queryWrapper需查询明确的单个列名
	 * 		如：select 列名 from xxx
	 * 		禁止：select 列名1,列名2,... from xxx
	 * @param queryWrapper 条件构建queryWrapper
	 * @param sClass 返回结果类型
	 * @return 单列结果集
	 */
	<S> List<S> selectSinglyColumnList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper,
									   @Param("sClass") Class<S> sClass);

	/**
	 * 插入所有 适用于oracle
	 * @param entityList 实体列表
	 * @return 影响行数
	 */
	Integer insertAllOracle(List<T> entityList);
}
